<?php
/**
 * Cascadierender Preprocessor zur Erstellung und Rueckersetzung von Variablen
 * Nach Aufruf von translate() werden die erstellten Variablen einem reset unterzogen
 * 
 * Dem C Praeprozessor nachempfunden, jedoch standardmaessig im Wiki-Style
 * und mit Cascadierendem Ersetzungsdurchlauf
 * 
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * 
 * */


Class Yapary_Placeholder
{
	private $tokenOpen = NULL;
	private $tokenClose = NULL;
		
	
	function __construct ( $_tokenOpen = '{{', $_tokenClose = '}}' )
	{
		$this->tokenOpen = $_tokenOpen;
		$this->tokenClose = $_tokenClose;
	}


	/**
	* Ersetzt die Parameter in der Uebergabe mit den Definitionen
	* Wiederholt die Uebersetzung so lange bis es keine Variablen mehr gibt welche Uebersetzt werden koennen
	* @param string $str : Zu uebersetzender String
	* @return string|NULL
	*/
	public function display ($str, array $arrYapary_Placeholder)
	{
		if (count($arrYapary_Placeholder) == 0) {
			return NULL;
		}

			
		// Durchlaufe den String mit allen Definitionen. Zaehle je Schleifendurchlauf ob es mindestens
		// eine zu uebersetzende Variable gab. Falls ja, wiederhole so lange bis es einen Durchlauf
		// mit keiner Uebersetzung gibt --> Cascadierung
		do {
			$replaces = 0;
			reset($arrYapary_Placeholder);
			while (list($varName, $replacement) = each($arrYapary_Placeholder)) {
				if (strpos($str, $this->tokenOpen.$varName.$this->tokenClose) !== false) {
					$replaces++;
					$str = str_replace($this->tokenOpen.$varName.$this->tokenClose, $replacement, $str);
				}
			}
		} while ($replaces >= 1);
		
		return (string) $str;
	}

	
}



?>